package com.yjxxt;

import com.yjxxt.dao.IDeptDao;
import com.yjxxt.dao.IEmpDao;
import com.yjxxt.empWithDept.empWithDept;
import com.yjxxt.vo.Dept;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @description
 */


public class Main {
    static SqlSessionFactory sqlSessionFactory = null;
    static {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
    public static void main(String[] args) throws IOException {

        testInsert();
//        testSelect();
//        testSelectMaxSal();
//        testUpdate();
//        testSelect1();
//        testDelete();
//        testSelectByName();
//        testInsert2();
//        testFindAllDeptNamesAndManagers();
        testFindDeptWithMaxEmployeeCount();

    }

    //   /**
    //     * 查找所有部门的名称和部门领导
    //     * @return 包含部门名称和领导的集合
    //     */

//    private static void testFindAllDeptNamesAndManagers() {
//        SqlSession sessionn = sqlSessionFactory.openSession(false);
//        try {
//            IDeptDao deptDao = sessionn.getMapper(IDeptDao.class);
//            List<empWithDept> list = deptDao.findAllDeptNamesAndManagers();
//            for (empWithDept dept : list) {
//                System.out.println(dept);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            sessionn.commit();
//            sessionn.close();
//        }
//
//     }

    private static void testFindDeptWithMaxEmployeeCount() {
        SqlSession session = sqlSessionFactory.openSession(false);
        try {
            IDeptDao deptDao = session.getMapper(IDeptDao.class);
           empWithDept dept = deptDao.findDeptWithMaxEmployeeCount();
           System.out.println(dept);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.commit();
            session.close();
        }

    }



    private static void testInsert() {
        SqlSession sessionn = sqlSessionFactory.openSession(false);//SqlSession 代表一次数据库会话，包含执行 SQL 的所有方法
        IDeptDao deptDao = sessionn.getMapper(IDeptDao.class);

        //        SqlSessionFactory 通过 openSession() 方法创建数据库会话对象
        //3、打开数据库会话

        //4、获取Mapper接口
//        通过 getMapper() 方法获取 IDeptDao 接口的实现
//        MyBatis 会动态生成这个接口的实现类
//        这样就可以通过 Java 接口方法调用 SQL 映射

        //5、执行数据库查询
//        调用 IDeptDao 接口的 selectByDeptno 方法
//        传入参数 10（部门编号）
//        MyBatis 会执行对应的 SQL 查询并返回结果
//        Dept dept = deptDao.selectByDeptno(10);
//        Dept dept =deptDao.selectByUsernameAndPasseord("ACCOUNTING",10);
//        //6、输出结果
////        System.out.println(dept.getDname());
//        System.out.println(dept);
//        List<Dept> list = deptDao.findByPage(1, 2);
//
//        System.out.println( list);
//        int i = deptDao.insert(new Dept("60","ACCOUNTING","New York"));
//        System.out.println(i);
//        sessionn.commit();
//        //删除用户
//        int i1 = deptDao.delete(50);
//        System.out.println(i1);

        //修改用户
//        int i2 = deptDao.update(new Dept("60","斗魂之神","斗魂竞技场"));
//        System.out.println(i2);
//        sessionn.commit();
    }
    //1
//    private static void testSelect() {
//        SqlSession sessionn = sqlSessionFactory.openSession(false);
//        try {
//            IEmpDao empDao = sessionn.getMapper(IEmpDao.class);
//            List<empWithDept> list = empDao.findAllWithDeptno();
//            for (empWithDept emp : list) {
//                System.out.println(emp);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        finally {
//            sessionn.close();
//        }
//    }
//    private static void testSelectMaxSal() {
//        SqlSession sessionn = sqlSessionFactory.openSession(false);
//        try {
//            IEmpDao empDao = sessionn.getMapper(IEmpDao.class);
//            empWithDept emp = empDao.findMaxSal();
//            System.out.println(emp);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }

    //修改用户
//    private static void testUpdate() {
//        SqlSession sessionn = sqlSessionFactory.openSession(false);
//        try {
//            IEmpDao empDao = sessionn.getMapper(IEmpDao.class);
//            //创建用户并使用setter方法
//            empWithDept emp = new empWithDept();
//            emp.setEmpno(7839);
//            emp.setEname("斗魂之神");
//            emp.setJob("斗魂");
//            emp.setDeptno(10);
//            int i = empDao.update(emp);
//            System.out.println(i);
//            sessionn.commit();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        finally {
//            sessionn.commit();
//            sessionn.close();
//        }
//    }
    //查询一个用户
//    private static void testSelect1() {
//        SqlSession sessionn = sqlSessionFactory.openSession(false);
//        try {
//           IEmpDao empDao = sessionn.getMapper(IEmpDao.class);
//           empWithDept emp = empDao.selectByEmpno(7839);
//           System.out.println(emp);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        finally {
//            sessionn.commit();
//            sessionn.close();
//        }
//    }

//    private static void testDelete() {
//        SqlSession sessionn = sqlSessionFactory.openSession(false);
//        try {
//            IEmpDao empDao = sessionn.getMapper(IEmpDao.class);
//            int i = empDao.delete(6666);
//            System.out.println(i);
//            sessionn.commit();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//根据名字中的任意一个字符查询员工
//    private static void testSelectByName() {
//        SqlSession sessionn = sqlSessionFactory.openSession(false);
//        try {
//            IEmpDao empDao = sessionn.getMapper(IEmpDao.class);
//            List<empWithDept> list = empDao.selectByName("S");
//            for (empWithDept emp : list) {
//                System.out.println(emp);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        finally {
//            sessionn.commit();
//            sessionn.close();
//        }
//    }

    //增加一名员工，并返回其id
//    private static void testInsert2() {
//        SqlSession sessionn = sqlSessionFactory.openSession(false);
//        try {
//            IEmpDao empDao = sessionn.getMapper(IEmpDao.class);
//            empWithDept  emp = new empWithDept();
//            emp.setEmpno(6666);
//            emp.setEname("斗魂之神");
//            emp.setJob("斗魂");
//            emp.setDeptno(10);
//            int i = empDao.insert(emp);
//            System.out.println(emp.getEmpno());
//            System.out.println(i);
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            sessionn.commit();
//            sessionn.close();
//        }
//    }
}
